// utils/api.js
const app = getApp()

// API基础配置
const API_BASE_URL = 'https://okeydo.fourcats.online'
const API_VERSION = ''

// 导入认证管理器
import authManager from './auth.js'

// 请求拦截器
function request(options) {
  // 默认需要token，除非明确指定不需要
  const needToken = options.needToken !== false;
  return new Promise((resolve, reject) => {
    // 显示加载中
    if (options.showLoading !== false) {
      wx.showLoading({
        title: options.loadingText || '请求中...',
        mask: true
      })
    }

    const data = {}

    if (options.data) {
      //  过滤null和undefined
      Object.keys(options.data).forEach(key => {
        if (options.data[key] !== null && options.data[key] !== undefined) {
          data[key] = options.data[key]
        }
      })
    }

    // 获取当前token
    const currentToken = needToken ? authManager.getToken() : null

    wx.request({
      url: `${API_BASE_URL}${API_VERSION}${options.url}`,
      method: options.method || 'GET',
      data: data,
      header: {
        'Content-Type': 'application/json',
        'X-API-KEY': 'c4608807-6562-41ac-9574-381250f2c41b',
        'Authorization': currentToken ? ('Bearer ' + currentToken) : '',
        ...options.header
      },
      success: (res) => {
        wx.hideLoading()

        if (res.statusCode === 200) {
          if (res.data.code === 0 || res.data.code === 200) {
            // 如果指定返回完整响应，则返回res.data
            if (options.returnFullResponse) {
              resolve(res.data)
            } else {
              resolve(res.data.data || res.data)
            }
          } else {
            // 不显示toast，让调用方处理
            reject(res.data)
          }
        } else if (res.statusCode === 401 && needToken) {
          // Token过期，尝试刷新
          authManager.refreshAccessToken().then(() => {
            // 刷新成功，重新发起请求
            const newToken = authManager.getToken()
            const retryOptions = {
              ...options,
              header: {
                ...options.header,
                'Authorization': newToken ? ('Bearer ' + newToken) : ''
              }
            }

            request(retryOptions).then(retryResult => {
              resolve(retryResult)
            }).catch(retryError => {
              reject(retryError)
            })
          }).catch(refreshError => {
            console.error('Token刷新失败:', refreshError)
            // 刷新失败，显示登录弹窗
            authManager.showLoginModal()
            reject(res)
          })
        } else {
          // 不显示toast，让调用方处理
          reject(res)
        }
      },
      fail: (err) => {
        wx.hideLoading()
        wx.showToast({
          title: '网络异常',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

// 用户相关API
export const userAPI = {
  // 登录
  login(data) {
    return request({
      url: '/app/login',
      method: 'POST',
      data,
      returnFullResponse: true // 返回完整响应，不处理data字段
    })
  },

  // 刷新token
  refreshToken(data) {
    return request({
      url: '/app/token/refresh',
      method: 'POST',
      data,
      needToken: false, // 刷新token不需要token
      returnFullResponse: true // 返回完整响应
    })
  },

  // 获取用户信息
  getUserProfile() {
    return request({
      url: '/app/user/profile',
      showLoading: false
    })
  },

  // 设置用户信息
  setUserProfile(data) {
    return request({
      url: '/app/user/profile',
      method: 'POST',
      data
    })
  },

  // 上传文件
  uploadFile(filePath, fileName = 'file') {
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: apiBaseUrl + '/app/upload', // 假设的上传接口
        filePath: filePath,
        name: fileName,
        header: {
          'Authorization': 'Bearer ' + authManager.getToken()
        },
        success: (res) => {
          try {
            const data = JSON.parse(res.data)
            if (data.code === 0 || data.code === 200) {
              resolve(data.data || data)
            } else {
              reject(data)
            }
          } catch (e) {
            reject(new Error('上传响应解析失败'))
          }
        },
        fail: (error) => {
          reject(error)
        }
      })
    })
  },

  // 获取订单列表
  getTradeList(params = {}) {
    return request({
      url: '/app/user/trade/list',
      data: params
    })
  },

  // 获取订单详情
  getTradeDetail(no) {
    return request({
      url: `/app/user/trade/${no}`
    })
  },

  // 创建订单
  // 获取业务Token
  getBizToken(action) {
    return request({
      url: '/app/bizToken',
      method: 'GET',
      data: {
        action: action
      }
    })
  },

  // 获取桌位详情
  getTableDetail(id) {
    return request({
      url: `/app/store/tables/${id}`,
      method: 'GET'
    })
  },

  createTrade(data, orderToken) {
    return request({
      url: '/app/user/trade',
      method: 'POST',
      data,
      header: orderToken ? {
        'X-Order-Token': orderToken
      } : {}
    })
  },

  // 获取用户信息（兼容旧接口）
  getUserInfo() {
    return request({
      url: '/user/info'
    })
  },

  // 更新用户信息
  updateUserInfo(data) {
    return request({
      url: '/user/info',
      method: 'PUT',
      data
    })
  },

  // 获取余额记录
  getBalanceRecords(params) {
    return request({
      url: '/app/user/balance/record',
      method: 'GET',
      data: params
    })
  },

  // 获取积分记录
  getCreditRecords(params) {
    return request({
      url: '/app/user/credit/record',
      method: 'GET',
      data: params
    })
  },

  // 修改交易（加单）
  modifyTrade(orderNo, data) {
    return request({
      url: `/app/user/trade/${orderNo}/modify`,
      method: 'POST',
      data: data
    })
  },

  // 获取COS临时密钥
  getCSToken() {
    return request({
      url: '/app/cos/token',
      method: 'GET'
    })
  }
}

// 商品相关API
export const productAPI = {
  // 获取商品分类列表
  getCategoryList(params = {}) {
    return request({
      url: '/app/product/category/list',
      data: {
        // parentId: params.parentId || '',
        page: params.page || 1,
        pageSize: params.pageSize || 20
      },
      needToken: false
    })
  },

  // 获取商品列表
  getProductList(params = {}) {
    return request({
      url: '/app/product/list',
      data: {
        category: params.category || null,
        page: params.page || 1,
        pageSize: params.pageSize || 20,
        status: params.stauts || 1
      },
      needToken: false
    })
  },

  // 获取商品详情
  getProductDetail(id) {
    return request({
      url: `/app/product/${id}`,
      needToken: false
    })
  },

  // 获取商品分类（兼容旧接口）
  getCategories() {
    return request({
      url: '/products/categories',
      needToken: false
    })
  },

  // 获取商品列表
  getProducts(params) {
    return request({
      url: '/products',
      data: params,
      needToken: false
    })
  },

  // 获取商品详情
  getProductDetail(id) {
    return request({
      url: `/app/product/${id}`,
      needToken: false
    })
  },

  // 获取推荐商品
  getRecommendProducts() {
    return request({
      url: '/products/recommend',
      needToken: false
    })
  }
}

// 订单相关API
export const orderAPI = {
  // 创建订单
  createOrder(data) {
    return request({
      url: '/orders',
      method: 'POST',
      data,
      loadingText: '正在下单...'
    })
  },

  // 获取订单列表
  getOrders(params) {
    return request({
      url: '/orders',
      data: params
    })
  },

  // 获取订单详情
  getOrderDetail(id) {
    return request({
      url: `/orders/${id}`
    })
  },

  // 取消订单
  cancelOrder(id) {
    return request({
      url: `/orders/${id}/cancel`,
      method: 'PUT',
      loadingText: '取消中...'
    })
  },

  // 支付订单
  payOrder(id, paymentData) {
    return request({
      url: `/orders/${id}/pay`,
      method: 'POST',
      data: paymentData,
      loadingText: '支付中...'
    })
  }
}

// 地址相关API
export const addressAPI = {
  // 获取地址列表
  getAddresses() {
    return request({
      url: '/addresses'
    })
  },

  // 创建地址
  createAddress(data) {
    return request({
      url: '/addresses',
      method: 'POST',
      data
    })
  },

  // 更新地址
  updateAddress(id, data) {
    return request({
      url: `/addresses/${id}`,
      method: 'PUT',
      data
    })
  },

  // 删除地址
  deleteAddress(id) {
    return request({
      url: `/addresses/${id}`,
      method: 'DELETE'
    })
  }
}

// 优惠券相关API
export const couponAPI = {
  // 获取可用优惠券
  getAvailableCoupons() {
    return request({
      url: '/coupons/available'
    })
  },

  // 获取我的优惠券
  getMyCoupons() {
    return request({
      url: '/coupons/my'
    })
  },

  // 使用优惠券
  useCoupon(couponId, orderId) {
    return request({
      url: `/coupons/${couponId}/use`,
      method: 'POST',
      data: {
        orderId
      }
    })
  }
}

// 默认导出request方法
export default request